package com.atguigu.exam.mapper;


import com.atguigu.exam.entity.Question;
import com.atguigu.exam.entity.QuestionDto;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 题目Mapper接口
 * 继承MyBatis Plus的BaseMapper，提供基础的CRUD操作
 */
public interface QuestionMapper extends BaseMapper<Question> {

    //根据分类ID获取题目数量
    List<Map<Long, Long>> getCategoryCount();

    /**
     * 分页查询题目列表（支持多条件筛选）
     *
     * RESTful API教学：
     * - URL：GET /api/questions/list
     * - 查询参数：通过@RequestParam接收URL查询参数
     * - 默认值：通过defaultValue设置参数默认值
     * - 可选参数：通过required = false设置可选参数
     *
     * MyBatis Plus分页教学：
     * - Page对象：封装分页信息（页码、每页大小、总数等）
     * - QueryWrapper：动态构建查询条件，避免SQL注入
     * - 条件构建：支持等值查询(eq)、模糊查询(like)、排序(orderBy)
     *
     * @param questionDto 查询条件
     * @return 封装的分页查询结果，包含题目列表和分页信息
     */
    Page<Question> customPage(Page<Question> ipage, @Param("questionDto") QuestionDto questionDto);

    /**
     * 根据ID查询单个题目详情
     *
     * RESTful API教学：
     * - URL模式：GET /api/questions/{id}
     * - 路径参数：通过@PathVariable获取URL中的参数
     * - 语义化：URL直观表达资源和操作
     * @param id 题目主键ID，通过URL路径传递
     * @return 题目详细信息，包含选项和答案
     */
    Question getQuestionById(@Param("id") Long id);

}